package cloudUser.util;

import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.signers.JWTSignerUtil;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: Smart School
 * @ClassName JwtUtilCustome
 * @description: 自定义 JWT 工具类
 * @author: 陈智博
 * @create: 2025-03-28 09:03
 * @Version 1.0
 **/
public class JwtUtilCustomer {

    /**
     * 设置 的 延长 过期 时间
     */
    public static final String secretKey = "keys";

    /**
     * 设置 的 延长 过期 时间
     */
    public static final long expirationTime = 10000 * 60 * 60;

    /**
     * 创建 token
     * @param claims 创建token 传过来的数据
     * @param subject 主题
     * @return 返回字符串
     */
    public static String createToken(Map<String, Object> claims, String subject) {
        Map<String,Object> hashMap = new HashMap<>();
        hashMap.put("sub", subject);
        hashMap.put("userUid",claims.get("userUid"));
        hashMap.put("iat", new Date(System.currentTimeMillis()));
        hashMap.put("exp", new Date(System.currentTimeMillis() + expirationTime));
        return JWTUtil.createToken(hashMap, JWTSignerUtil.hs256(secretKey.getBytes()));
    }

    /**
     * 解析 token
     * @param token  加密 过后的 字符串
     * @return 返回 map 集合
     */
    public static Map<String,Object> parseToken(String token) {
        JWT jwt = JWTUtil.parseToken(token);
        Map<String,Object> hashMap = new HashMap<>();
        hashMap.put("sub",jwt.getPayload("sub"));
        hashMap.put("userUid",jwt.getPayload("userUid"));
        hashMap.put("iat",jwt.getPayload("iat"));
        hashMap.put("exp",jwt.getPayload("exp"));
        return hashMap;
    }

    /**
     * 校验 token 是否 合法
     * @param token 加密 过后 的 字符串
     * @return 返回 bool
     */
    public static boolean verifyToken(String token) {
        return JWTUtil.verify(token,secretKey.getBytes());
    }

}
